home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / xip / iijppp.lzh / src / log.c < prev    next >
C/C++ Source or Header  |  1994-10-20  |  4KB  |  220 lines

  1. /*
  2.  *                PPP logging facility
  3.  *
  4.  *        Written by Toshiharu OHNO (tony-o@iij.ad.jp)
  5.  *
  6.  *   Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd.
  7.  *
  8.  * Redistribution and use in source and binary forms are permitted
  9.  * provided that the above copyright notice and this paragraph are
  10.  * duplicated in all such forms and that any documentation,
  11.  * advertising materials, and other materials related to such
  12.  * distribution and use acknowledge that the software was developed
  13.  * by the Internet Initiative Japan, Inc.  The name of the
  14.  * IIJ may not be used to endorse or promote products derived
  15.  * from this software without specific prior written permission.
  16.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  17.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  18.  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  19.  *
  20.  */
  21. #include "defs.h"
  22. #include <time.h>
  23. #include <netdb.h>
  24.  
  25. #include "hdlc.h"
  26.  
  27. #define    MAXLOG    70
  28.  
  29. #define USELOGFILE
  30.  
  31. #ifdef USELOGFILE
  32. static FILE *logfile;
  33. #endif
  34. static char logbuff[2000];
  35. static char *logptr;
  36. static struct mbuf *logtop;
  37. static struct mbuf *lognext;
  38. static int  logcnt;
  39. static int  mypid;
  40.  
  41. int loglevel = (1 << LOG_LCP)| (1 << LOG_PHASE);
  42.  
  43. void
  44. ListLog()
  45. {
  46.   struct mbuf *bp;
  47.  
  48.   for (bp = logtop; bp; bp = bp->next) {
  49.     write(1, MBUF_CTOP(bp), bp->cnt);
  50.     usleep(10);
  51.   }
  52. }
  53.  
  54. int
  55. LogOpen()
  56. {
  57. #ifdef USELOGFILE
  58.   logfile = fopen(LOGFILE, "a");
  59.   if (logfile == NULL) {
  60.     fprintf(stderr, "can't open %s.\r\n", LOGFILE);
  61.     return(1);
  62.   }
  63. #endif
  64.   fprintf(stderr, "Log level is %02x\r\n", loglevel);
  65.   logptr = logbuff;
  66.   logcnt = 0;
  67.   logtop = lognext = NULL;
  68.   return(0);
  69. }
  70.  
  71. void
  72. LogFlush()
  73. {
  74.   struct mbuf *bp;
  75.   int cnt;
  76.  
  77. #ifdef USELOGFILE
  78.   *logptr = 0;
  79.   fprintf(logfile, "%s", logbuff);
  80.   fflush(logfile);
  81. #endif
  82.   cnt = logptr - logbuff + 1;
  83.   bp = mballoc(cnt, MB_LOG);
  84.   bcopy(logbuff, MBUF_CTOP(bp), cnt);
  85.   bp->cnt = cnt;
  86.   if (lognext) {
  87.     lognext->next = bp;
  88.     lognext = bp;
  89.     if (++logcnt > MAXLOG) {
  90.       logcnt--;
  91.       logtop = mbfree(logtop);
  92.     }
  93.   } else {
  94.     lognext = logtop = bp;
  95.   }
  96.   logptr = logbuff;
  97. }
  98.  
  99. void
  100. DupLog()
  101. {
  102.   mypid = 0;
  103. #ifdef USELOGFILE
  104.   dup2(fileno(logfile), 2);
  105. #endif
  106. }
  107.  
  108. void
  109. LogClose()
  110. {
  111.   LogFlush();
  112. #ifdef USELOGFILE
  113.   fclose(logfile);
  114. #endif
  115. }
  116.  
  117. void
  118. logprintf(format, arg1, arg2, arg3, arg4, arg5, arg6)
  119. char *format;
  120. void *arg1, *arg2, *arg3, *arg4, *arg5, *arg6;
  121. {
  122.   sprintf(logptr, format, arg1, arg2, arg3, arg4, arg5, arg6);
  123.   logptr += strlen(logptr);
  124.   LogFlush();
  125. }
  126.  
  127. void
  128. LogDumpBp(level, header, bp)
  129. int level;
  130. char *header;
  131. struct mbuf *bp;
  132. {
  133.   u_char *cp;
  134.   int cnt, loc;
  135.  
  136.   if (!(loglevel & (1 << level)))
  137.     return;
  138.   LogTimeStamp();
  139.   sprintf(logptr, "%s\n", header);
  140.   logptr += strlen(logptr);
  141.   loc = 0;
  142.   LogTimeStamp();
  143.   while (bp) {
  144.     cp = MBUF_CTOP(bp);
  145.     cnt = bp->cnt;
  146.     while (cnt-- > 0) {
  147.       sprintf(logptr, " %02x", *cp++);
  148.       logptr += strlen(logptr);
  149.       if (++loc == 16) {
  150.     loc = 0;
  151.     *logptr++ = '\n';
  152.     if (logptr - logbuff > 1500)
  153.       LogFlush();
  154.       if (cnt) LogTimeStamp();
  155.       }
  156.     }
  157.     bp = bp->next;
  158.   }
  159.   if (loc) *logptr++ = '\n';
  160.   LogFlush();
  161. }
  162.  
  163. void
  164. LogDumpBuff(level, header, ptr, cnt)
  165. int level;
  166. char *header;
  167. u_char *ptr;
  168. int cnt;
  169. {
  170.   int loc;
  171.  
  172.   if (cnt < 1) return;
  173.   if (!(loglevel & (1 << level)))
  174.     return;
  175.   LogTimeStamp();
  176.   sprintf(logptr, "%s\n", header);
  177.   logptr += strlen(logptr);
  178.   LogTimeStamp();
  179.   loc = 0;
  180.   while (cnt-- > 0) {
  181.     sprintf(logptr, " %02x", *ptr++);
  182.     logptr += strlen(logptr);
  183.     if (++loc == 16) {
  184.       loc = 0;
  185.       *logptr++ = '\n';
  186.       if (cnt) LogTimeStamp();
  187.     }
  188.   }
  189.   if (loc) *logptr++ = '\n';
  190.   LogFlush();
  191. }
  192.  
  193. void
  194. LogTimeStamp()
  195. {
  196.   struct tm *ptm;
  197.   time_t ltime;
  198.  
  199.   if (mypid == 0)
  200.     mypid = getpid();
  201.   ltime = time(0);
  202.   ptm = localtime(<ime);
  203.   sprintf(logptr, "%02d-%02d %02d:%02d:%02d [%d] ", 
  204.     ptm->tm_mon + 1, ptm->tm_mday,
  205.     ptm->tm_hour, ptm->tm_min, ptm->tm_sec, mypid);
  206.   logptr += strlen(logptr);
  207. }
  208.  
  209. void
  210. LogPrintf(level, format, arg1, arg2, arg3, arg4, arg5, arg6)
  211. int level;
  212. char *format;
  213. void *arg1, *arg2, *arg3, *arg4, *arg5, *arg6;
  214. {
  215.   if (!(loglevel & (1 << level)))
  216.     return;
  217.   LogTimeStamp();
  218.   logprintf(format, arg1, arg2, arg3, arg4, arg5, arg6);
  219. }
  220.